dontstarvefandomcom-20200222-history
Krampus
Krampus is a mob that will spawn if the player kills too many "innocent" (non-aggressive) Animals, exceeding a certain naughtiness rating. As the player is getting close to Krampus spawning, there will be a hissing noise warning the player each time they kill an innocent non-aggressive creatures. The player will hear a unique piercing noise upon Krampus' spawn, no matter where he is. Not acting "naughty" for a while gradually decreases the naughtiness rating. Krampus takes 3 blasts from the Ice Staff to be frozen. Behavior Krampus will break chests, then proceed to steal everything before retreating. In order to get their items back the player must kill him, and pick up the items. Krampus will also pick up items lying on the ground prior to destroying chests. Eye Bone and Wooden Thing components (Ring Thing, Crank Thing, Box Thing, and Metal Potato Thing) are the only items that Krampus will not steal. Krampus moves fairly fast, dealing 20 points of damage per hit to unarmored targets. Krampus has a 2% chance of dropping his Item Sack, which can be equipped like a Backpack. It yields 14 inventory slots rather than the Backpack's 9. He also behaves similarly to a Gobbler when being pursued. Krampus will disappear into his own sack if the player doesn't kill him fast enough. Krampus seems to run to the player and run away when there are no more Items that exist on screen Naughtiness Krampus will come and steal your itemsif you have been very naughty. It cannot steal Chester's eye bone and wooden things, but it can break containers and steal entire stacks of items, and then escape by paradoxically jumping into its own bag. One or two krampii can spawn at the same time after day 50, and two or three after day 100. Each minute of restrain reduces naughtiness by 1. Once you reach a random threshold, krampus will come and steal your items. The threshold is a random number between 31 and 50. After Krampus appears, the naughtiness level is 0. Murdering innocent animals makes you naughty, and each minute of restrain makes you less naughty. It is worth to noting that setting creatures ablaze with the Fire Staff will not award you with naughtiness points. This is because the fire is considered to be the killing factor. Scripting To help keep track of your current naughtiness rating, you can create your own Naughtiness "Meter" through some file editing. Follow the steps below: 1. Go to the game directory, find and backup the file "kramped.lua" ( \data\scripts\components\kramped.lua ) 2. Open the original file 3a. Follow these exact steps below to edit the file, OR alternatively, jump to step 3b. for a pre-edited file find this function: function Kramped:OnNaughtyAction(how_naughty) within that function find this line: self.timetodecay = self.decayperiod start a new line below and add: print("Naughtiness: ", self.actions) find this function: function Kramped:OnUpdate(dt) within that function find this line: self.actions = self.actions - 1 again start a new line below and add: print("Naughtiness: ", self.actions) Save the file and exit. 3b. Press ctrl + a to select everything in the file and delete. copy the text from the box below local Kramped = Class(function(self, inst) self.inst = inst self.actions = 0 self.threshold = 30 self.inst:ListenForEvent( "killed", function(inst,data) self:onkilledother(data.victim) end ) self.decayperiod = 60 self.timetodecay = self.decayperiod self.inst:StartUpdatingComponent(self) end) local SPAWN_DIST = 30 function Kramped:OnSave() return { threshold = self.threshold, actions = self.actions } end function Kramped:onkilledother(victim) if victim and victim.prefab then if victim.prefab "pigman" then if not victim.components.werebeast or not victim.components.werebeast:IsInWereState() then self:OnNaughtyAction(3) end elseif victim.prefab "beefalo" then self:OnNaughtyAction(4) elseif victim.prefab "crow" then self:OnNaughtyAction(1) elseif victim.prefab "robin" then self:OnNaughtyAction(2) elseif victim.prefab "robin_winter" then self:OnNaughtyAction(2) elseif victim.prefab "smallbird" then self:OnNaughtyAction(6) elseif victim.prefab "butterfly" then self:OnNaughtyAction(1) elseif victim.prefab "rabbit" then self:OnNaughtyAction(1) elseif victim.prefab "tallbird" then self:OnNaughtyAction(2) end end end function Kramped:OnLoad(data) self.actions = data.actions or self.actions self.threshold = data.threshold or self.threshold end function Kramped:GetDebugString() return string.format("Actions: %d / %d, decay in %2.2f", self.actions, self.threshold, self.timetodecay) end function Kramped:OnUpdate(dt) if self.actions > 0 then self.timetodecay = self.timetodecay - dt if self.timetodecay < 0 then self.timetodecay = self.decayperiod self.actions = self.actions - 1 print("Naughtiness: ", self.actions) end end end function Kramped:OnNaughtyAction(how_naughty) self.actions = self.actions + (how_naughty or 1) self.timetodecay = self.decayperiod print("Naughtiness: ", self.actions) if self.actions >= self.threshold then local day = GetClock().numcycles local num_krampii = 1 self.threshold = 30 + math.random(20) self.actions = 0 if day > 50 then num_krampii = math.random(2) elseif day > 100 then num_krampii = 1 + math.random(2) end for k = 1, num_krampii do self:MakeAKrampus() end else self.inst:DoTaskInTime(1 + math.random()*2, function() local snd = CreateEntity() snd.entity:AddTransform() snd.entity:AddSoundEmitter() snd.persists = false local theta = math.random() * 2 * PI local radius = 15 local offset = Vector3(self.inst.Transform:GetWorldPosition()) + Vector3(radius * math.cos( theta ), 0, -radius * math.sin( theta )) snd.Transform:SetPosition(offset.x,offset.y,offset.z) local left = self.threshold - self.actions if left < 5 then snd.SoundEmitter:PlaySound("dontstarve/creatures/krampus/beenbad_lvl3") elseif left < 15 then snd.SoundEmitter:PlaySound("dontstarve/creatures/krampus/beenbad_lvl2") elseif left < 20 then snd.SoundEmitter:PlaySound("dontstarve/creatures/krampus/beenbad_lvl1") end snd:Remove() end) end end function Kramped:GetSpawnPoint(pt) local theta = math.random() * 2 * PI local radius = SPAWN_DIST local offset = FindWalkableOffset(pt, theta, radius, 12, true) if offset then return pt+offset end end function Kramped:MakeAKrampus() local pt = Vector3(self.inst.Transform:GetWorldPosition()) local spawn_pt = self:GetSpawnPoint(pt) if spawn_pt then local kramp = SpawnPrefab("krampus") if kramp then kramp.Physics:Teleport(spawn_pt:Get()) kramp:FacePoint(pt) end end end return Kramped paste it into your empty script Save the file and exit 4. Now whenever in game, you can press ctrl + L to enable the log. Each time the naughtiness level changes the log will print the current value on screen. Additionally, you can also find a text file record of the the log under the current user's My Documents\Klei\DoNotStarve\ folder. Killing Strategies *By far the easiest method to kill Krampus is to simply put it to sleep (Sleep Dart, Pan Flute). Then kill the Krampus with a Spear or Tentacle Spike . *Alternately, the player may kill Krampus in direct combat. This can be done by first using ranged weapons such as a Boomerang or a Blow Dart to strike Krampus, this will cause Krampus to engage the player. You may then lure Krampus into hazards such as Tooth Traps. *If the player keeps track of their "naughtiness" they can set a trap for the Krampus. The player should place a Chest with a few dummy items between where they will do the final act and their other Chests. Then the player should surround it with Bee Mines. The Krampus should go to the Chest, trigger the mines, and die. *Another way to farm Krampus is to kill Rabbits with traps and when the loud hissing sound is played, get a Rabbit, go away from the camp, place a random item on the ground and kill the Rabbit. As Krampus spawns, it will take away the item. If the player fails to kill Krampus when he is taking the item, drop another one (but he may have disappeared already) *One of the funniest ways to kill Krampus is by putting a small stack of killer bees into a remote chest, and then letting him destroy it. *If you do not have access to Tooth Traps or Bee Mines, you can use the decoy chest listed above. Krampus will stop running to steal from the chest. You can then run for him and hit him. Once he is hit, he will focus entirely on you and ignore the other items or chests you might have until he dies. *A good way to get items back is to make Krampus run into some Frogs, thier tongues will make Krampus drop items he has stolen and then can be picked up at will. Trivia *In folklore, "Krampus" is a beast-like creature from the folklore of Alpine countries, thought to punish bad children during the Yule season, in contrast with Saint Nicholas, who rewards nice ones with gifts. Krampus is said to capture particularly naughty children in his sack and carry them to his lair.http://en.wikipedia.org/wiki/Krampus *Krampus might also have some references to the Scandinavian Yule goat, an old pagan tradition originating from Norse mythology. Note that Krampus's horns resemble ones of an ornamental straw goat and in Finnish tradition, young men used to wear goat heads made out of straw (notice the Krampus's figure) in the Yule season, while going house to house demanding food and alcohol. The Finnish version of Santa Claus still has the name of the Yule goat. *Krampus' contrast to Saint Nicholas is reinforced by the Charcoal he carries; traditionally, naughty children are punished with coal in their stockings. *If you look closely Krampus wears chains around the waist (which create an X across the Krampus Sack once it's dropped) as well as cuff-locks with links by the wrists.